#ifndef JOB_H_
#define JOB_H_

#include "../include/Effect.h"
#include "../include/Gaussian.h"
#include "../include/CvtColor.h"
#include "../include/Resize.h"
#include <string>
#include <vector>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>

using namespace std;
using namespace cv;

// The class implements a job, and handles its path location and required effects.
class Job
{
private:
	int input, output;
	vector<Effect*> effectsList;

public:
	// Class constructor. Receives the input and output representation of the job, and its requested OpenCV effects.
	Job(int& inputRepresentation, int& outputRepresentation, vector<Effect*>& effects);

	// Class destructor.
	virtual ~Job(void);

	// Returns the input representation of the job.
	int getInput();

	// Returns the output representation of the job.
	int getOutput();

	// Processes all of the requested OpenCV effects of the job, in the order it was received.
	void processAllEffects(Mat& src);
};

#endif /* JOB_H_ */
